package com.foxnicweb.app.domain.patent;

import com.github.foxnic.dao.entity.Entity;
import io.swagger.annotations.ApiModel;
import javax.persistence.Table;
import com.github.foxnic.sql.meta.DBTable;
import com.foxnicweb.app.constants.db.PatentTables.PAT_PATENT_MEMBER;
import javax.persistence.Id;
import io.swagger.annotations.ApiModelProperty;
import javax.persistence.Transient;
import java.util.Map;
import com.github.foxnic.dao.entity.EntityContext;
import com.foxnicweb.app.domain.patent.meta.PatentMemberMeta;
import com.github.foxnic.commons.lang.DataParser;
import com.github.foxnic.sql.data.ExprRcd;



/**
 * 审批流程相关人员
 * <p>审批流程相关人员 , 数据表 pat_patent_member 的PO类型</p>
 * @author 李方捷 , leefangjie@qq.com
 * @since 2023-04-19 10:25:35
 * @sign CD0E202BAED5205ABD13142113252B2D
 * 此文件由工具自动生成，请勿修改。若表结构或配置发生变动，请使用工具重新生成。
*/

@Table(name = "pat_patent_member")
@ApiModel(description = "审批流程相关人员 ; 审批流程相关人员 , 数据表 pat_patent_member 的PO类型")
public class PatentMember extends Entity {

	private static final long serialVersionUID = 1L;

	public static final DBTable TABLE =PAT_PATENT_MEMBER.$TABLE;
	
	/**
	 * 主键：主键
	*/
	@Id
	@ApiModelProperty(required = true,value="主键" , notes = "主键" , example = "700409713774297088")
	private Long id;
	
	/**
	 * 案件ID：案件ID
	*/
	@ApiModelProperty(required = false,value="案件ID" , notes = "案件ID" , example = "2452061")
	private Long patentId;
	
	/**
	 * 员工ID：员工ID
	*/
	@ApiModelProperty(required = false,value="员工ID" , notes = "员工ID" , example = "473272")
	private String empId;
	
	/**
	 * 成员类型：成员类型
	*/
	@ApiModelProperty(required = false,value="成员类型" , notes = "成员类型" , example = "customer")
	private String memberType;
	
	/**
	 * 姓名：姓名
	*/
	@ApiModelProperty(required = false,value="姓名" , notes = "姓名" , example = "深圳市华曦达科技股份有限公司")
	private String name;
	
	/**
	 * 获得 主键<br>
	 * 主键
	 * @return 主键
	*/
	public Long getId() {
		return id;
	}
	
	/**
	 * 设置 主键
	 * @param id 主键
	 * @return 当前对象
	*/
	public PatentMember setId(Long id) {
		this.id=id;
		return this;
	}
	
	/**
	 * 获得 案件ID<br>
	 * 案件ID
	 * @return 案件ID
	*/
	public Long getPatentId() {
		return patentId;
	}
	
	/**
	 * 设置 案件ID
	 * @param patentId 案件ID
	 * @return 当前对象
	*/
	public PatentMember setPatentId(Long patentId) {
		this.patentId=patentId;
		return this;
	}
	
	/**
	 * 获得 员工ID<br>
	 * 员工ID
	 * @return 员工ID
	*/
	public String getEmpId() {
		return empId;
	}
	
	/**
	 * 设置 员工ID
	 * @param empId 员工ID
	 * @return 当前对象
	*/
	public PatentMember setEmpId(String empId) {
		this.empId=empId;
		return this;
	}
	
	/**
	 * 获得 成员类型<br>
	 * 成员类型
	 * @return 成员类型
	*/
	public String getMemberType() {
		return memberType;
	}
	
	/**
	 * 设置 成员类型
	 * @param memberType 成员类型
	 * @return 当前对象
	*/
	public PatentMember setMemberType(String memberType) {
		this.memberType=memberType;
		return this;
	}
	
	/**
	 * 获得 姓名<br>
	 * 姓名
	 * @return 姓名
	*/
	public String getName() {
		return name;
	}
	
	/**
	 * 设置 姓名
	 * @param name 姓名
	 * @return 当前对象
	*/
	public PatentMember setName(String name) {
		this.name=name;
		return this;
	}

	/**
	 * 将自己转换成指定类型的PO
	 * @param poType  PO类型
	 * @return PatentMember , 转换好的 PatentMember 对象
	*/
	@Transient
	public <T extends Entity> T toPO(Class<T> poType) {
		return EntityContext.create(poType, this);
	}

	/**
	 * 将自己转换成任意指定类型
	 * @param pojoType  Pojo类型
	 * @return PatentMember , 转换好的 PoJo 对象
	*/
	@Transient
	public <T> T toPojo(Class<T> pojoType) {
		if(Entity.class.isAssignableFrom(pojoType)) {
			return (T)this.toPO((Class<Entity>)pojoType);
		}
		try {
			T pojo=pojoType.newInstance();
			EntityContext.copyProperties(pojo, this);
			return pojo;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 克隆当前对象
	*/
	@Transient
	public PatentMember clone() {
		return duplicate(true);
	}

	/**
	 * 复制当前对象
	 * @param all 是否复制全部属性，当 false 时，仅复制来自数据表的属性
	*/
	@Transient
	public PatentMember duplicate(boolean all) {
		com.foxnicweb.app.domain.patent.meta.PatentMemberMeta.$$proxy$$ inst = new com.foxnicweb.app.domain.patent.meta.PatentMemberMeta.$$proxy$$();
		inst.setEmpId(this.getEmpId());
		inst.setPatentId(this.getPatentId());
		inst.setName(this.getName());
		inst.setId(this.getId());
		inst.setMemberType(this.getMemberType());
		inst.clearModifies();
		return inst;
	}

	/**
	 * 克隆当前对象
	*/
	@Transient
	public PatentMember clone(boolean deep) {
		return EntityContext.clone(PatentMember.class,this,deep);
	}

	/**
	 * 将 Map 转换成 PatentMember
	 * @param patentMemberMap 包含实体信息的 Map 对象
	 * @return PatentMember , 转换好的的 PatentMember 对象
	*/
	@Transient
	public static PatentMember createFrom(Map<String,Object> patentMemberMap) {
		if(patentMemberMap==null) return null;
		PatentMember po = create();
		EntityContext.copyProperties(po,patentMemberMap);
		po.clearModifies();
		return po;
	}

	/**
	 * 将 Pojo 转换成 PatentMember
	 * @param pojo 包含实体信息的 Pojo 对象
	 * @return PatentMember , 转换好的的 PatentMember 对象
	*/
	@Transient
	public static PatentMember createFrom(Object pojo) {
		if(pojo==null) return null;
		PatentMember po = create();
		EntityContext.copyProperties(po,pojo);
		po.clearModifies();
		return po;
	}

	/**
	 * 创建一个 PatentMember，等同于 new
	 * @return PatentMember 对象
	*/
	@Transient
	public static PatentMember create() {
		return new com.foxnicweb.app.domain.patent.meta.PatentMemberMeta.$$proxy$$();
	}

	/**
	 * 从 Map 读取
	 * @param map 记录数据
	 * @param cast 是否用 DataParser 进行类型转换
	 * @return  是否读取成功
	*/
	public boolean read(Map<String, Object> map,boolean cast) {
		if(map==null) return false;
		if(cast) {
			this.setEmpId(DataParser.parse(String.class, map.get(PatentMemberMeta.EMP_ID)));
			this.setPatentId(DataParser.parse(Long.class, map.get(PatentMemberMeta.PATENT_ID)));
			this.setName(DataParser.parse(String.class, map.get(PatentMemberMeta.NAME)));
			this.setId(DataParser.parse(Long.class, map.get(PatentMemberMeta.ID)));
			this.setMemberType(DataParser.parse(String.class, map.get(PatentMemberMeta.MEMBER_TYPE)));
			// others
			return true;
		} else {
			try {
				this.setEmpId( (String)map.get(PatentMemberMeta.EMP_ID));
				this.setPatentId( (Long)map.get(PatentMemberMeta.PATENT_ID));
				this.setName( (String)map.get(PatentMemberMeta.NAME));
				this.setId( (Long)map.get(PatentMemberMeta.ID));
				this.setMemberType( (String)map.get(PatentMemberMeta.MEMBER_TYPE));
				// others
				return true;
			} catch (Exception e) {
				return false;
			}
		}
	}

	/**
	 * 从 Map 读取
	 * @param r 记录数据
	 * @param cast 是否用 DataParser 进行类型转换
	 * @return  是否读取成功
	*/
	public boolean read(ExprRcd r,boolean cast) {
		if(r==null) return false;
		if(cast) {
			this.setEmpId(DataParser.parse(String.class, r.getValue(PatentMemberMeta.EMP_ID)));
			this.setPatentId(DataParser.parse(Long.class, r.getValue(PatentMemberMeta.PATENT_ID)));
			this.setName(DataParser.parse(String.class, r.getValue(PatentMemberMeta.NAME)));
			this.setId(DataParser.parse(Long.class, r.getValue(PatentMemberMeta.ID)));
			this.setMemberType(DataParser.parse(String.class, r.getValue(PatentMemberMeta.MEMBER_TYPE)));
			return true;
		} else {
			try {
				this.setEmpId( (String)r.getValue(PatentMemberMeta.EMP_ID));
				this.setPatentId( (Long)r.getValue(PatentMemberMeta.PATENT_ID));
				this.setName( (String)r.getValue(PatentMemberMeta.NAME));
				this.setId( (Long)r.getValue(PatentMemberMeta.ID));
				this.setMemberType( (String)r.getValue(PatentMemberMeta.MEMBER_TYPE));
				return true;
			} catch (Exception e) {
				return false;
			}
		}
	}
}